package Objet;

import java.util.Collections;
import java.util.Random;
import java.util.Vector;

public class ListeObjets {
	private Vector<Objet>	lst;

	public ListeObjets() {
		this.lst = new Vector<Objet>();
	}

	public String affiche() {
		String s = "";
		for (int i = 0; i < this.lst.size(); i++) {
			s = s + this.lst.get(i).affiche();
		}
		return s + "\n";
	}

	public String affichelnum() {
		String s = "";
		for (int i = 0; i < this.lst.size(); i++) {
			s = s + " " + this.lst.get(i).getnum();
		}
		return s + "\n";
	}

	public String affichelpoids() {
		String s = "";
		for (int i = 0; i < this.lst.size(); i++) {
			s = s + " " + this.lst.get(i).getpoids();
		}
		return s + "\n";
	}

	public String affichelutil() {
		String s = "";
		for (int i = 0; i < this.lst.size(); i++) {
			s = s + " " + this.lst.get(i).getutil();
		}
		return s + "\n";

	}

	public void ajout(Objet x) {
		this.lst.add(x);
	}

	public void append(ListeObjets l) {
		this.lst.addAll(l.getliste());
	}
	


	public ListeObjets duplique() {
		ListeObjets l = new ListeObjets();
		@SuppressWarnings("unchecked")
		Vector<Objet> v = (Vector<Objet>) this.lst.clone();
		l.setliste(v);
		return l;
	}

	public Objet get(int i) {
		return (this.lst.get(i));
	}

	public Vector<Objet> getliste() {
		return this.lst;
	}

	public Objet getObjUtilMax() {

		Objet leMax = this.lst.get(0);

		for (Objet o : this.lst) {
			if (leMax.getutil() < o.getutil()) {
				leMax = o;
			}
		}
		return leMax;
	}

	public int getpoids() {
		int pds = 0;
		for (int i = 0; i < this.lst.size(); i++) {
			pds += this.lst.get(i).getpoids();
		}
		return pds;
	}

	public Objet getRandomObjet() {
		return this.lst.get(new Random().nextInt(this.lst.size() - 1));
	}

	public int getutil() {
		int u = 0;
		for (int i = 0; i < this.lst.size(); i++) {
			u += this.lst.get(i).getutil();
		}
		return u;
	}

	public int index(Objet o) {
		if (this.lst.contains(o)) {
			return this.lst.indexOf(o);
		} else {
			return (-1);
		}
	}

	public void retire(int i) {
		this.lst.remove(i);
	}

	public void retireobjet(Objet x) {
		this.lst.remove(x);
	}

	public void setliste(Vector<Objet> v) {
		this.lst = v;
	}

	public int taille() {
		return this.lst.size();
	}

	@SuppressWarnings("unchecked")
	public void trie() {
		Collections.sort(this.lst);
	}
}
